{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9d4c5a46",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "from imblearn.over_sampling import SMOTE\n",
    "from sklearn.preprocessing import LabelBinarizer, MinMaxScaler, StandardScaler\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import confusion_matrix, classification_report, plot_roc_curve\n",
    "\n",
    "from sklearn.ensemble import RandomForestClassifier\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "4ab655b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_raw = pd.read_csv('Jan_2019_ontime.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "96d35a49",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 583985 entries, 0 to 583984\n",
      "Data columns (total 22 columns):\n",
      " #   Column                 Non-Null Count   Dtype  \n",
      "---  ------                 --------------   -----  \n",
      " 0   DAY_OF_MONTH           583985 non-null  int64  \n",
      " 1   DAY_OF_WEEK            583985 non-null  int64  \n",
      " 2   OP_UNIQUE_CARRIER      583985 non-null  object \n",
      " 3   OP_CARRIER_AIRLINE_ID  583985 non-null  int64  \n",
      " 4   OP_CARRIER             583985 non-null  object \n",
      " 5   TAIL_NUM               581442 non-null  object \n",
      " 6   OP_CARRIER_FL_NUM      583985 non-null  int64  \n",
      " 7   ORIGIN_AIRPORT_ID      583985 non-null  int64  \n",
      " 8   ORIGIN_AIRPORT_SEQ_ID  583985 non-null  int64  \n",
      " 9   ORIGIN                 583985 non-null  object \n",
      " 10  DEST_AIRPORT_ID        583985 non-null  int64  \n",
      " 11  DEST_AIRPORT_SEQ_ID    583985 non-null  int64  \n",
      " 12  DEST                   583985 non-null  object \n",
      " 13  DEP_TIME               567633 non-null  float64\n",
      " 14  DEP_DEL15              567630 non-null  float64\n",
      " 15  DEP_TIME_BLK           583985 non-null  object \n",
      " 16  ARR_TIME               566924 non-null  float64\n",
      " 17  ARR_DEL15              565963 non-null  float64\n",
      " 18  CANCELLED              583985 non-null  float64\n",
      " 19  DIVERTED               583985 non-null  float64\n",
      " 20  DISTANCE               583985 non-null  float64\n",
      " 21  Unnamed: 21            0 non-null       float64\n",
      "dtypes: float64(8), int64(8), object(6)\n",
      "memory usage: 98.0+ MB\n"
     ]
    }
   ],
   "source": [
    "df_raw.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "816c87c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>DAY_OF_MONTH</th>\n",
       "      <th>DAY_OF_WEEK</th>\n",
       "      <th>OP_UNIQUE_CARRIER</th>\n",
       "      <th>OP_CARRIER_AIRLINE_ID</th>\n",
       "      <th>OP_CARRIER</th>\n",
       "      <th>TAIL_NUM</th>\n",
       "      <th>OP_CARRIER_FL_NUM</th>\n",
       "      <th>ORIGIN_AIRPORT_ID</th>\n",
       "      <th>ORIGIN_AIRPORT_SEQ_ID</th>\n",
       "      <th>ORIGIN</th>\n",
       "      <th>...</th>\n",
       "      <th>DEST</th>\n",
       "      <th>DEP_TIME</th>\n",
       "      <th>DEP_DEL15</th>\n",
       "      <th>DEP_TIME_BLK</th>\n",
       "      <th>ARR_TIME</th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>CANCELLED</th>\n",
       "      <th>DIVERTED</th>\n",
       "      <th>DISTANCE</th>\n",
       "      <th>Unnamed: 21</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8688C</td>\n",
       "      <td>3280</td>\n",
       "      <td>11953</td>\n",
       "      <td>1195302</td>\n",
       "      <td>GNV</td>\n",
       "      <td>...</td>\n",
       "      <td>ATL</td>\n",
       "      <td>601.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0600-0659</td>\n",
       "      <td>722.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N348PQ</td>\n",
       "      <td>3281</td>\n",
       "      <td>13487</td>\n",
       "      <td>1348702</td>\n",
       "      <td>MSP</td>\n",
       "      <td>...</td>\n",
       "      <td>CVG</td>\n",
       "      <td>1359.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1400-1459</td>\n",
       "      <td>1633.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>596.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8896A</td>\n",
       "      <td>3282</td>\n",
       "      <td>11433</td>\n",
       "      <td>1143302</td>\n",
       "      <td>DTW</td>\n",
       "      <td>...</td>\n",
       "      <td>CVG</td>\n",
       "      <td>1215.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1200-1259</td>\n",
       "      <td>1329.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>229.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8886A</td>\n",
       "      <td>3283</td>\n",
       "      <td>15249</td>\n",
       "      <td>1524906</td>\n",
       "      <td>TLH</td>\n",
       "      <td>...</td>\n",
       "      <td>ATL</td>\n",
       "      <td>1521.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1500-1559</td>\n",
       "      <td>1625.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>223.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8974C</td>\n",
       "      <td>3284</td>\n",
       "      <td>10397</td>\n",
       "      <td>1039707</td>\n",
       "      <td>ATL</td>\n",
       "      <td>...</td>\n",
       "      <td>FSM</td>\n",
       "      <td>1847.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1900-1959</td>\n",
       "      <td>1940.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>579.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   DAY_OF_MONTH  DAY_OF_WEEK OP_UNIQUE_CARRIER  OP_CARRIER_AIRLINE_ID  \\\n",
       "0             1            2                9E                  20363   \n",
       "1             1            2                9E                  20363   \n",
       "2             1            2                9E                  20363   \n",
       "3             1            2                9E                  20363   \n",
       "4             1            2                9E                  20363   \n",
       "\n",
       "  OP_CARRIER TAIL_NUM  OP_CARRIER_FL_NUM  ORIGIN_AIRPORT_ID  \\\n",
       "0         9E   N8688C               3280              11953   \n",
       "1         9E   N348PQ               3281              13487   \n",
       "2         9E   N8896A               3282              11433   \n",
       "3         9E   N8886A               3283              15249   \n",
       "4         9E   N8974C               3284              10397   \n",
       "\n",
       "   ORIGIN_AIRPORT_SEQ_ID ORIGIN  ...  DEST  DEP_TIME DEP_DEL15  DEP_TIME_BLK  \\\n",
       "0                1195302    GNV  ...   ATL     601.0       0.0     0600-0659   \n",
       "1                1348702    MSP  ...   CVG    1359.0       0.0     1400-1459   \n",
       "2                1143302    DTW  ...   CVG    1215.0       0.0     1200-1259   \n",
       "3                1524906    TLH  ...   ATL    1521.0       0.0     1500-1559   \n",
       "4                1039707    ATL  ...   FSM    1847.0       0.0     1900-1959   \n",
       "\n",
       "   ARR_TIME ARR_DEL15  CANCELLED  DIVERTED  DISTANCE  Unnamed: 21  \n",
       "0     722.0       0.0        0.0       0.0     300.0          NaN  \n",
       "1    1633.0       0.0        0.0       0.0     596.0          NaN  \n",
       "2    1329.0       0.0        0.0       0.0     229.0          NaN  \n",
       "3    1625.0       0.0        0.0       0.0     223.0          NaN  \n",
       "4    1940.0       0.0        0.0       0.0     579.0          NaN  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_raw.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "a2003b07",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_raw = df_raw[df_raw['DIVERTED'] == 0]\n",
    "df_raw = df_raw[df_raw['CANCELLED'] == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "5bb05be6",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df_raw[['DAY_OF_WEEK', 'OP_UNIQUE_CARRIER', 'DEP_TIME_BLK', 'ORIGIN', 'DEST', 'DISTANCE', 'ARR_DEL15']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "id": "8e39858f",
   "metadata": {},
   "outputs": [],
   "source": [
    "df.dropna()\n",
    "df = df.reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "id": "03704d22",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df.rename(columns = {'DAY_OF_WEEK' : 'ON_WEEKEND'})\n",
    "df['ON_WEEKEND'] = (df['ON_WEEKEND'] > 5).astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "id": "a976f71c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>CARRIER_cat</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OP_UNIQUE_CARRIER</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>WN</th>\n",
       "      <td>16111.0</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OO</th>\n",
       "      <td>14024.0</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AA</th>\n",
       "      <td>13741.0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DL</th>\n",
       "      <td>9403.0</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UA</th>\n",
       "      <td>9156.0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B6</th>\n",
       "      <td>6429.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>YX</th>\n",
       "      <td>5864.0</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MQ</th>\n",
       "      <td>5844.0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9E</th>\n",
       "      <td>4013.0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AS</th>\n",
       "      <td>3506.0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OH</th>\n",
       "      <td>3475.0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>YV</th>\n",
       "      <td>3310.0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EV</th>\n",
       "      <td>3022.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>NK</th>\n",
       "      <td>2383.0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F9</th>\n",
       "      <td>2362.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G4</th>\n",
       "      <td>1728.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>HA</th>\n",
       "      <td>851.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   ARR_DEL15  CARRIER_cat\n",
       "OP_UNIQUE_CARRIER                        \n",
       "WN                   16111.0           16\n",
       "OO                   14024.0           15\n",
       "AA                   13741.0           14\n",
       "DL                    9403.0           13\n",
       "UA                    9156.0           12\n",
       "B6                    6429.0           11\n",
       "YX                    5864.0           10\n",
       "MQ                    5844.0            9\n",
       "9E                    4013.0            8\n",
       "AS                    3506.0            7\n",
       "OH                    3475.0            6\n",
       "YV                    3310.0            5\n",
       "EV                    3022.0            4\n",
       "NK                    2383.0            3\n",
       "F9                    2362.0            2\n",
       "G4                    1728.0            1\n",
       "HA                     851.0            0"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "carrier_df = df[['OP_UNIQUE_CARRIER','ARR_DEL15']].groupby('OP_UNIQUE_CARRIER').sum().sort_values(by='ARR_DEL15',ascending=False)\n",
    "carrier_df['CARRIER_cat'] = pd.qcut(carrier_df['ARR_DEL15'], 17, labels = False)\n",
    "carrier_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "79b6c97d",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_carrier = carrier_df.loc[df['OP_UNIQUE_CARRIER']].reset_index()\n",
    "df['CARRIER_cat'] = data_carrier['CARRIER_cat']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "id": "a2a30ee1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>TIME_cat</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DEP_TIME_BLK</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1700-1759</th>\n",
       "      <td>8270.0</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1800-1859</th>\n",
       "      <td>7978.0</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1600-1659</th>\n",
       "      <td>7576.0</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1400-1459</th>\n",
       "      <td>7290.0</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1500-1559</th>\n",
       "      <td>7281.0</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1900-1959</th>\n",
       "      <td>7219.0</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1200-1259</th>\n",
       "      <td>6639.0</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1300-1359</th>\n",
       "      <td>6398.0</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1100-1159</th>\n",
       "      <td>6361.0</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1000-1059</th>\n",
       "      <td>6104.0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000-2059</th>\n",
       "      <td>5764.0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0800-0859</th>\n",
       "      <td>5506.0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0900-0959</th>\n",
       "      <td>5097.0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0700-0759</th>\n",
       "      <td>4765.0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0600-0659</th>\n",
       "      <td>4582.0</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2100-2159</th>\n",
       "      <td>3682.0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2200-2259</th>\n",
       "      <td>2329.0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0001-0559</th>\n",
       "      <td>1808.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2300-2359</th>\n",
       "      <td>573.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              ARR_DEL15  TIME_cat\n",
       "DEP_TIME_BLK                     \n",
       "1700-1759        8270.0        18\n",
       "1800-1859        7978.0        17\n",
       "1600-1659        7576.0        16\n",
       "1400-1459        7290.0        15\n",
       "1500-1559        7281.0        14\n",
       "1900-1959        7219.0        13\n",
       "1200-1259        6639.0        12\n",
       "1300-1359        6398.0        11\n",
       "1100-1159        6361.0        10\n",
       "1000-1059        6104.0         9\n",
       "2000-2059        5764.0         8\n",
       "0800-0859        5506.0         7\n",
       "0900-0959        5097.0         6\n",
       "0700-0759        4765.0         5\n",
       "0600-0659        4582.0         4\n",
       "2100-2159        3682.0         3\n",
       "2200-2259        2329.0         2\n",
       "0001-0559        1808.0         1\n",
       "2300-2359         573.0         0"
      ]
     },
     "execution_count": 191,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "time_blk_df = df[['DEP_TIME_BLK','ARR_DEL15']].groupby('DEP_TIME_BLK').sum().sort_values(by='ARR_DEL15',ascending=False)\n",
    "time_blk_df['TIME_cat'] = pd.qcut(time_blk_df['ARR_DEL15'], 19, labels = False)\n",
    "time_blk_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "id": "f8711dba",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_time = time_blk_df.loc[df['DEP_TIME_BLK']].reset_index()\n",
    "df['DEP_TIME_cat'] = data_time['TIME_cat']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "id": "a45e3267",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>ORIGIN_cat</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ORIGIN</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ORD</th>\n",
       "      <td>7655.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DFW</th>\n",
       "      <td>4322.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LGA</th>\n",
       "      <td>4075.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ATL</th>\n",
       "      <td>4013.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SFO</th>\n",
       "      <td>3562.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BRW</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ADK</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CPR</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PPG</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LYH</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>346 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        ARR_DEL15  ORIGIN_cat\n",
       "ORIGIN                       \n",
       "ORD        7655.0          24\n",
       "DFW        4322.0          24\n",
       "LGA        4075.0          24\n",
       "ATL        4013.0          24\n",
       "SFO        3562.0          24\n",
       "...           ...         ...\n",
       "BRW           2.0           0\n",
       "ADK           1.0           0\n",
       "CPR           1.0           0\n",
       "PPG           0.0           0\n",
       "LYH           0.0           0\n",
       "\n",
       "[346 rows x 2 columns]"
      ]
     },
     "execution_count": 193,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "origin_df = df[['ORIGIN','ARR_DEL15']].groupby('ORIGIN').sum().sort_values(by='ARR_DEL15',ascending=False)\n",
    "origin_df['ORIGIN_cat'] = pd.qcut(origin_df['ARR_DEL15'], 25, labels = False)\n",
    "origin_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "3c9ba15e",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_origin = origin_df.loc[df['ORIGIN']].reset_index()\n",
    "df['ORIGIN_cat'] = data_origin['ORIGIN_cat']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "8e38dd8a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>DEST_cat</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DEST</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ORD</th>\n",
       "      <td>6441.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LGA</th>\n",
       "      <td>4836.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DFW</th>\n",
       "      <td>4282.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ATL</th>\n",
       "      <td>3931.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SFO</th>\n",
       "      <td>3642.0</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>CPR</th>\n",
       "      <td>3.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>STC</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PPG</th>\n",
       "      <td>2.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ADK</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ELM</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>346 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      ARR_DEL15  DEST_cat\n",
       "DEST                     \n",
       "ORD      6441.0        24\n",
       "LGA      4836.0        24\n",
       "DFW      4282.0        24\n",
       "ATL      3931.0        24\n",
       "SFO      3642.0        24\n",
       "...         ...       ...\n",
       "CPR         3.0         0\n",
       "STC         2.0         0\n",
       "PPG         2.0         0\n",
       "ADK         1.0         0\n",
       "ELM         0.0         0\n",
       "\n",
       "[346 rows x 2 columns]"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dest_df = df[['DEST','ARR_DEL15']].groupby('DEST').sum().sort_values(by='ARR_DEL15',ascending=False)\n",
    "dest_df['DEST_cat'] = pd.qcut(dest_df['ARR_DEL15'], 25, labels = False)\n",
    "dest_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "id": "7ed47b45",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_dest = dest_df.loc[df['DEST']].reset_index()\n",
    "df['DEST_cat'] = data_dest['DEST_cat']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "id": "c17ff214",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ON_WEEKEND</th>\n",
       "      <th>CARRIER_cat</th>\n",
       "      <th>DEP_TIME_cat</th>\n",
       "      <th>ORIGIN_cat</th>\n",
       "      <th>DEST_cat</th>\n",
       "      <th>DISTANCE</th>\n",
       "      <th>ARR_DEL15</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>24</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>23</td>\n",
       "      <td>22</td>\n",
       "      <td>596.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>24</td>\n",
       "      <td>22</td>\n",
       "      <td>229.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>24</td>\n",
       "      <td>223.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "      <td>24</td>\n",
       "      <td>8</td>\n",
       "      <td>579.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565958</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>21</td>\n",
       "      <td>3801.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565959</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565960</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565961</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>17</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565962</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>565963 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        ON_WEEKEND  CARRIER_cat  DEP_TIME_cat  ORIGIN_cat  DEST_cat  DISTANCE  \\\n",
       "0                0            8             4          12        24     300.0   \n",
       "1                0            8            15          23        22     596.0   \n",
       "2                0            8            12          24        22     229.0   \n",
       "3                0            8            14          14        24     223.0   \n",
       "4                0            8            13          24         8     579.0   \n",
       "...            ...          ...           ...         ...       ...       ...   \n",
       "565958           0           12             5           3        21    3801.0   \n",
       "565959           0           12             5           3         3     129.0   \n",
       "565960           0           12             6           3         5     129.0   \n",
       "565961           0           12            17           3         5     129.0   \n",
       "565962           0           12            16           3         3     129.0   \n",
       "\n",
       "        ARR_DEL15  \n",
       "0             0.0  \n",
       "1             0.0  \n",
       "2             0.0  \n",
       "3             0.0  \n",
       "4             0.0  \n",
       "...           ...  \n",
       "565958        0.0  \n",
       "565959        0.0  \n",
       "565960        0.0  \n",
       "565961        0.0  \n",
       "565962        0.0  \n",
       "\n",
       "[565963 rows x 7 columns]"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'ORIGIN_cat', 'DEST_cat', 'DISTANCE', 'ARR_DEL15']]\n",
    "final_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "7c0e1ef6",
   "metadata": {},
   "outputs": [],
   "source": [
    "def feature_importance(columns, classifier):        \n",
    "    features = list(zip(columns, classifier.feature_importances_))\n",
    "    sorted_features = sorted(features, key = lambda x: x[1]*-1)\n",
    "    \n",
    "    keys = [value[0] for value in sorted_features]\n",
    "    values = [value[1] for value in sorted_features]\n",
    "    return pd.DataFrame(data={'feature': keys, 'value': values})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "6ef2e613",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_roc_curve(df):\n",
    "    df_X = final_df.drop('ARR_DEL15', axis=1)\n",
    "    df_y = final_df[['ARR_DEL15']]\n",
    "\n",
    "    X = df_X.values\n",
    "    y = df_y.values\n",
    "\n",
    "    y = LabelBinarizer().fit_transform(y)\n",
    "\n",
    "    oversample = SMOTE()\n",
    "    X, y = oversample.fit_resample(X, y)\n",
    "\n",
    "    X = StandardScaler().fit_transform(X)\n",
    "    X = MinMaxScaler().fit_transform(X)\n",
    "\n",
    "    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)\n",
    "    \n",
    "    model = RandomForestClassifier()\n",
    "    model = model.fit(X_train, y_train)\n",
    "    \n",
    "    y_pred_test = model.predict(X_test)\n",
    "\n",
    "    print(confusion_matrix(y_test, y_pred_test))\n",
    "    \n",
    "    print(classification_report(y_test, y_pred_test))\n",
    "    \n",
    "    return feature_importance(df_X.columns.to_list(), model), plot_roc_curve(model, X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "407e04f0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70136 22003]\n",
      " [19678 72480]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.78      0.76      0.77     92139\n",
      "           1       0.77      0.79      0.78     92158\n",
      "\n",
      "    accuracy                           0.77    184297\n",
      "   macro avg       0.77      0.77      0.77    184297\n",
      "weighted avg       0.77      0.77      0.77    184297\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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2gUXXMDJJ59cYdqkSZP45z//WWFabGxs+fCGDRs455xzSEpKYvDgwVx66aX88MMPtYpt3759jB07lqSkJMaOHcv+/furXO7uu++mX79+9OnTh1tvvRV1L15HjRpFr169yv82du/eDcALL7zAjBkzahVbmZBpcKHUmpgIWdHR0aSlpZGRkUHr1q158cUXgx1SlT777DPS0tJIS0urcNKsTnFxcY32UTkRZGRkcPPNN/Pqq6+ydu1aUlNTOfHEE2u0Ta98k9u0adNIT0/nySef5Ne//jVXXXWV5+1UdcyPPPIIt956a/n4gQMHWLFiBdnZ2WzZssXTdvPz8zn33HO54YYb2LhxI9988w033nhjjcvbK3vssccYM2YMGzduZMyYMTz22GNHLLNkyRIWL15Meno6GRkZLF++nIULF5bPnzNnTvnfRrt27QC49tpref7552sVWxmv7xE0elZZHHx/eHcNa3cerNNt9j2+JQ+O894txvDhw0lPTwdg2bJl3HbbbeTn5xMdHc3LL79Mr169mDlzJvPnz+fw4cNs3ryZn//85zzxxBMAvPzyyzz66KMkJCQwaNAgIiMjAdi6dSvXXnstWVlZJCYm8vLLL9OlSxcmTZpEdHQ0K1euZPfu3cyYMYNXXnmFpUuXMmzYMGbOnHnUWKvbZlRUFCtXrmTEiBHcdNNN3HTTTezZs4eYmBimT59O7969efPNN/nDH/5AWFgY8fHxfPLJJzzwwAPk5eXx5Zdfcu+99/L+++9z33330bt3b8C5e7rhhhuOiGX69OlMmzaNwsJCTjzxRGbPnk1MTMwR+/jiiy9Ys2YN11xzDYWFhZSWlvLWW2+RlJREbGwsubm5jB8/ntzcXIYMGcK9997LunXriI2N5c4772Tz5s1VHkvlY37mmWfKY8vJySE9PZ1BgwaVT/vXv/7FuHHjaN++PfPmzeN3v/ud37+N1157jeHDhzNu3LjyaaNGjfK7nj///ve/+fzzzwG4+uqrGTVqFI8//niFZUSE/Px8CgsLUVWKiopo3759tduNiYmha9euLFu2jKFDh9YqxpC5PrauKk1JSQmffvop48ePB6B3794sWrSIlStXMmXKlAoni7S0NF5//XVWr17N66+/zvbt29m1axcPPvggixcv5ssvv2Tt2rXly99yyy1cffXVpKen84tf/KLC1en+/ftZunQp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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance, plot = get_roc_curve(final_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "182a153f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DISTANCE</td>\n",
       "      <td>0.291018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DEP_TIME_cat</td>\n",
       "      <td>0.239628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ON_WEEKEND</td>\n",
       "      <td>0.190071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>CARRIER_cat</td>\n",
       "      <td>0.112618</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ORIGIN_cat</td>\n",
       "      <td>0.084450</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>DEST_cat</td>\n",
       "      <td>0.082215</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        feature     value\n",
       "0      DISTANCE  0.291018\n",
       "1  DEP_TIME_cat  0.239628\n",
       "2    ON_WEEKEND  0.190071\n",
       "3   CARRIER_cat  0.112618\n",
       "4    ORIGIN_cat  0.084450\n",
       "5      DEST_cat  0.082215"
      ]
     },
     "execution_count": 200,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "fcfafc1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from graphdatascience import GraphDataScience\n",
    "\n",
    "host = 'bolt://localhost:7687'\n",
    "user = 'neo4j'\n",
    "password = 'letmein'\n",
    "\n",
    "gds = GraphDataScience(host, auth=(user,password))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "3c3f4398",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0.3\n"
     ]
    }
   ],
   "source": [
    "print(gds.version())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "fb337b75",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>DAY_OF_MONTH</th>\n",
       "      <th>DAY_OF_WEEK</th>\n",
       "      <th>OP_UNIQUE_CARRIER</th>\n",
       "      <th>OP_CARRIER_AIRLINE_ID</th>\n",
       "      <th>OP_CARRIER</th>\n",
       "      <th>TAIL_NUM</th>\n",
       "      <th>OP_CARRIER_FL_NUM</th>\n",
       "      <th>ORIGIN_AIRPORT_ID</th>\n",
       "      <th>ORIGIN_AIRPORT_SEQ_ID</th>\n",
       "      <th>ORIGIN</th>\n",
       "      <th>...</th>\n",
       "      <th>DEST</th>\n",
       "      <th>DEP_TIME</th>\n",
       "      <th>DEP_DEL15</th>\n",
       "      <th>DEP_TIME_BLK</th>\n",
       "      <th>ARR_TIME</th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>CANCELLED</th>\n",
       "      <th>DIVERTED</th>\n",
       "      <th>DISTANCE</th>\n",
       "      <th>Unnamed: 21</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8688C</td>\n",
       "      <td>3280</td>\n",
       "      <td>11953</td>\n",
       "      <td>1195302</td>\n",
       "      <td>GNV</td>\n",
       "      <td>...</td>\n",
       "      <td>ATL</td>\n",
       "      <td>601.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0600-0659</td>\n",
       "      <td>722.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>300.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N348PQ</td>\n",
       "      <td>3281</td>\n",
       "      <td>13487</td>\n",
       "      <td>1348702</td>\n",
       "      <td>MSP</td>\n",
       "      <td>...</td>\n",
       "      <td>CVG</td>\n",
       "      <td>1359.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1400-1459</td>\n",
       "      <td>1633.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>596.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8896A</td>\n",
       "      <td>3282</td>\n",
       "      <td>11433</td>\n",
       "      <td>1143302</td>\n",
       "      <td>DTW</td>\n",
       "      <td>...</td>\n",
       "      <td>CVG</td>\n",
       "      <td>1215.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1200-1259</td>\n",
       "      <td>1329.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>229.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8886A</td>\n",
       "      <td>3283</td>\n",
       "      <td>15249</td>\n",
       "      <td>1524906</td>\n",
       "      <td>TLH</td>\n",
       "      <td>...</td>\n",
       "      <td>ATL</td>\n",
       "      <td>1521.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1500-1559</td>\n",
       "      <td>1625.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>223.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>9E</td>\n",
       "      <td>20363</td>\n",
       "      <td>9E</td>\n",
       "      <td>N8974C</td>\n",
       "      <td>3284</td>\n",
       "      <td>10397</td>\n",
       "      <td>1039707</td>\n",
       "      <td>ATL</td>\n",
       "      <td>...</td>\n",
       "      <td>FSM</td>\n",
       "      <td>1847.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1900-1959</td>\n",
       "      <td>1940.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>579.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583980</th>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>UA</td>\n",
       "      <td>19977</td>\n",
       "      <td>UA</td>\n",
       "      <td>N776UA</td>\n",
       "      <td>200</td>\n",
       "      <td>12016</td>\n",
       "      <td>1201602</td>\n",
       "      <td>GUM</td>\n",
       "      <td>...</td>\n",
       "      <td>HNL</td>\n",
       "      <td>749.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0700-0759</td>\n",
       "      <td>1832.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3801.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583981</th>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>UA</td>\n",
       "      <td>19977</td>\n",
       "      <td>UA</td>\n",
       "      <td>N36280</td>\n",
       "      <td>174</td>\n",
       "      <td>12016</td>\n",
       "      <td>1201602</td>\n",
       "      <td>GUM</td>\n",
       "      <td>...</td>\n",
       "      <td>SPN</td>\n",
       "      <td>717.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0700-0759</td>\n",
       "      <td>759.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583982</th>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>UA</td>\n",
       "      <td>19977</td>\n",
       "      <td>UA</td>\n",
       "      <td>N36280</td>\n",
       "      <td>117</td>\n",
       "      <td>14955</td>\n",
       "      <td>1495503</td>\n",
       "      <td>SPN</td>\n",
       "      <td>...</td>\n",
       "      <td>GUM</td>\n",
       "      <td>857.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0900-0959</td>\n",
       "      <td>933.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583983</th>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>UA</td>\n",
       "      <td>19977</td>\n",
       "      <td>UA</td>\n",
       "      <td>N39726</td>\n",
       "      <td>105</td>\n",
       "      <td>14955</td>\n",
       "      <td>1495503</td>\n",
       "      <td>SPN</td>\n",
       "      <td>...</td>\n",
       "      <td>GUM</td>\n",
       "      <td>1820.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1800-1859</td>\n",
       "      <td>1854.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>583984</th>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>UA</td>\n",
       "      <td>19977</td>\n",
       "      <td>UA</td>\n",
       "      <td>N39726</td>\n",
       "      <td>104</td>\n",
       "      <td>12016</td>\n",
       "      <td>1201602</td>\n",
       "      <td>GUM</td>\n",
       "      <td>...</td>\n",
       "      <td>SPN</td>\n",
       "      <td>1636.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1600-1659</td>\n",
       "      <td>1719.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>129.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>565963 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        DAY_OF_MONTH  DAY_OF_WEEK OP_UNIQUE_CARRIER  OP_CARRIER_AIRLINE_ID  \\\n",
       "0                  1            2                9E                  20363   \n",
       "1                  1            2                9E                  20363   \n",
       "2                  1            2                9E                  20363   \n",
       "3                  1            2                9E                  20363   \n",
       "4                  1            2                9E                  20363   \n",
       "...              ...          ...               ...                    ...   \n",
       "583980            31            4                UA                  19977   \n",
       "583981            31            4                UA                  19977   \n",
       "583982            31            4                UA                  19977   \n",
       "583983            31            4                UA                  19977   \n",
       "583984            31            4                UA                  19977   \n",
       "\n",
       "       OP_CARRIER TAIL_NUM  OP_CARRIER_FL_NUM  ORIGIN_AIRPORT_ID  \\\n",
       "0              9E   N8688C               3280              11953   \n",
       "1              9E   N348PQ               3281              13487   \n",
       "2              9E   N8896A               3282              11433   \n",
       "3              9E   N8886A               3283              15249   \n",
       "4              9E   N8974C               3284              10397   \n",
       "...           ...      ...                ...                ...   \n",
       "583980         UA   N776UA                200              12016   \n",
       "583981         UA   N36280                174              12016   \n",
       "583982         UA   N36280                117              14955   \n",
       "583983         UA   N39726                105              14955   \n",
       "583984         UA   N39726                104              12016   \n",
       "\n",
       "        ORIGIN_AIRPORT_SEQ_ID ORIGIN  ...  DEST  DEP_TIME DEP_DEL15  \\\n",
       "0                     1195302    GNV  ...   ATL     601.0       0.0   \n",
       "1                     1348702    MSP  ...   CVG    1359.0       0.0   \n",
       "2                     1143302    DTW  ...   CVG    1215.0       0.0   \n",
       "3                     1524906    TLH  ...   ATL    1521.0       0.0   \n",
       "4                     1039707    ATL  ...   FSM    1847.0       0.0   \n",
       "...                       ...    ...  ...   ...       ...       ...   \n",
       "583980                1201602    GUM  ...   HNL     749.0       0.0   \n",
       "583981                1201602    GUM  ...   SPN     717.0       0.0   \n",
       "583982                1495503    SPN  ...   GUM     857.0       0.0   \n",
       "583983                1495503    SPN  ...   GUM    1820.0       0.0   \n",
       "583984                1201602    GUM  ...   SPN    1636.0       0.0   \n",
       "\n",
       "        DEP_TIME_BLK  ARR_TIME ARR_DEL15  CANCELLED  DIVERTED  DISTANCE  \\\n",
       "0          0600-0659     722.0       0.0        0.0       0.0     300.0   \n",
       "1          1400-1459    1633.0       0.0        0.0       0.0     596.0   \n",
       "2          1200-1259    1329.0       0.0        0.0       0.0     229.0   \n",
       "3          1500-1559    1625.0       0.0        0.0       0.0     223.0   \n",
       "4          1900-1959    1940.0       0.0        0.0       0.0     579.0   \n",
       "...              ...       ...       ...        ...       ...       ...   \n",
       "583980     0700-0759    1832.0       0.0        0.0       0.0    3801.0   \n",
       "583981     0700-0759     759.0       0.0        0.0       0.0     129.0   \n",
       "583982     0900-0959     933.0       0.0        0.0       0.0     129.0   \n",
       "583983     1800-1859    1854.0       0.0        0.0       0.0     129.0   \n",
       "583984     1600-1659    1719.0       0.0        0.0       0.0     129.0   \n",
       "\n",
       "        Unnamed: 21  \n",
       "0               NaN  \n",
       "1               NaN  \n",
       "2               NaN  \n",
       "3               NaN  \n",
       "4               NaN  \n",
       "...             ...  \n",
       "583980          NaN  \n",
       "583981          NaN  \n",
       "583982          NaN  \n",
       "583983          NaN  \n",
       "583984          NaN  \n",
       "\n",
       "[565963 rows x 22 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_raw"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "6ddbb510",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#import airports\n",
    "airports = df_raw['ORIGIN'].unique().tolist()\n",
    "\n",
    "gds.run_cypher(\"\"\"\n",
    "UNWIND $data AS airport_id\n",
    "CREATE (:Airport {id: airport_id})\n",
    "\"\"\", {'data': airports})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "ecf27866",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import connections\n",
    "\n",
    "connections = df_raw.groupby(['DEST', 'ORIGIN']).size().to_frame('count').reset_index()\n",
    "\n",
    "gds.run_cypher(\"\"\"\n",
    "UNWIND $data AS row\n",
    "MATCH (origin:Airport {id: row.ORIGIN})\n",
    "MATCH (target:Airport {id: row.DEST})\n",
    "MERGE (origin)-[c:CONNECTION]->(target)\n",
    "SET c.count = row.count\n",
    "\"\"\", {'data': connections.to_dict('records')})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "df712b84",
   "metadata": {},
   "outputs": [],
   "source": [
    "G, res = gds.graph.project('airports','Airport', 'CONNECTION', relationshipProperties=['count'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "id": "9c1196ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Degree centrality\n",
    "\n",
    "pr = gds.degree.stream(G, relationshipWeightProperty='count', orientation='UNDIRECTED')\n",
    "pr['airport_id'] = [n.get('id') for n in gds.util.asNodes(pr['nodeId'].to_list())]\n",
    "pr = pr[['airport_id', 'score']].set_index('airport_id')\n",
    "\n",
    "dest_pr = pr.loc[df['DEST']].reset_index()\n",
    "origin_pr = pr.loc[df['ORIGIN']].reset_index()\n",
    "\n",
    "df['ORIGIN_d'] = origin_bc['score']\n",
    "df['DEST_d'] = dest_bc['score']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "7f2b31da",
   "metadata": {},
   "outputs": [],
   "source": [
    "#final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DISTANCE', 'ARR_DEL15', 'ORIGIN_d', 'DEST_d']]\n",
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DISTANCE', 'ARR_DEL15', 'DEST_d']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "652a9f18",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70584 21555]\n",
      " [19468 72690]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.78      0.77      0.77     92139\n",
      "           1       0.77      0.79      0.78     92158\n",
      "\n",
      "    accuracy                           0.78    184297\n",
      "   macro avg       0.78      0.78      0.78    184297\n",
      "weighted avg       0.78      0.78      0.78    184297\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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WWHeueeey3HHHVdh3qRJk3j77bcrzIuJiSn/vGbNGs4880wSExMZMmQIF110ETt27KhVbHv27GHs2LEkJiYyduxY9u7dW+V6t956K/379ycpKYkbb7wRdW9eCwsLmTx5Mn369KFv3768847TqcPTTz/NjBkzahVbmZB5var8PYKQOWNTJioqirS0NNLT02nTpg3PPPNMsEOq0pdffklaWhppaWkVLprVKS4urtExKieC9PR0rr/+el599VVWrVpFamoqvXv3rtE+vfJNbtOnT2f58uU88sgjXH311fzud7/zvJ+qzvmBBx7gxhtvLJ/et28fS5YsITs7mw0bNnjab0FBAWeddRbXXHMNa9eu5YcffuDaa6+tcX17ZQ8++CCnnHIKa9eu5ZRTTuHBBx88ZJ0FCxYwf/58li9fTnp6OosXL2bevHkA3H///XTo0IE1a9awatUqTjrpJACuuOIKnnrqqVrFVsbrewSNnjUWB9/f31/Jqm3763Sf/TrHcfc478NijBgxguXLlwOwaNEibrrpJgoKCoiKiuLFF1/kmGOOYebMmcyZM4e8vDzWr1/Peeedx8MPPwzAiy++yP/+7//SqlUrBg0aREREBAAZGRlcccUV7N69m/bt2/Piiy+SkJDApEmTiIqKYunSpezcuZMZM2bw8ssvs3DhQoYPH87MmTMPG2t1+4yMjGTp0qWMGjWK6667juuuu45du3YRHR3Nc889R9++fXnrrbf4+9//TlhYGPHx8Xz22Wfcdddd5Ofn8+2333L77bfz4Ycfcscdd9C3b1/AKT1dc801h8Ty3HPPMX36dAoLC+nduzevvPIK0dHRhxzj66+/ZuXKlfz+97+nsLCQ0tJS3nnnHRITE4mJiSE3N5fx48eTm5vL0KFDuf3221m9ejUxMTHccsstrF+/vspzqXzO06ZNK48tJyeH5cuXM2jQoPJ57777LuPGjaNjx47Mnj2bv/71r37/bbz22muMGDGCcePGlc8bPXq03+38+c9//sNXX30FwOWXX87o0aN56KGHKqwjIhQUFFBYWIiqUlRURMeOHQGYMWMGP/74IwDNmjWjXbt2AERHR9O9e3cWLVrEsGHDahVjyNwfl1g31CGvpKSEzz//nPHjxwPQt29fvvnmG5YuXcrUqVMrXCzS0tJ44403WLFiBW+88QZbtmxh+/bt3H333cyf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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance, plot = get_roc_curve(final_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "c14977a9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DISTANCE</td>\n",
       "      <td>0.283501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DEP_TIME_cat</td>\n",
       "      <td>0.265457</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ON_WEEKEND</td>\n",
       "      <td>0.198504</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DEST_d</td>\n",
       "      <td>0.143181</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>CARRIER_cat</td>\n",
       "      <td>0.109357</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        feature     value\n",
       "0      DISTANCE  0.283501\n",
       "1  DEP_TIME_cat  0.265457\n",
       "2    ON_WEEKEND  0.198504\n",
       "3        DEST_d  0.143181\n",
       "4   CARRIER_cat  0.109357"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "5b49cf6b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# betweenness centrality\n",
    "\n",
    "pr = gds.betweenness.stream(G)\n",
    "pr['airport_id'] = [n.get('id') for n in gds.util.asNodes(pr['nodeId'].to_list())]\n",
    "pr = pr[['airport_id', 'score']].set_index('airport_id')\n",
    "\n",
    "dest_pr = pr.loc[df['DEST']].reset_index()\n",
    "origin_pr = pr.loc[df['ORIGIN']].reset_index()\n",
    "\n",
    "df['ORIGIN_bc'] = origin_bc['score']\n",
    "df['DEST_bc'] = dest_bc['score']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "id": "ab4129cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DISTANCE', 'ARR_DEL15', 'DEST_bc']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "bb5eadc9",
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70631 21508]\n",
      " [19453 72705]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.78      0.77      0.78     92139\n",
      "           1       0.77      0.79      0.78     92158\n",
      "\n",
      "    accuracy                           0.78    184297\n",
      "   macro avg       0.78      0.78      0.78    184297\n",
      "weighted avg       0.78      0.78      0.78    184297\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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N9xQYd7555/PSSedVGHe2LFjeeeddyrMi4+PL/+8du1azjnnHFJSUujfvz+XXnopP/30U61i2717NyNGjCAlJYURI0awZ8+eKte755576NWrF6mpqdx2222oe/NaWFjIuHHj6N69Oz169ODdd51OHV544QUmT55cq9jKhMzrVeXvEYTMGZsyMTExZGZmkpWVRYsWLXjxxReDHVKVvvjiCzIzM8nMzKxw0axOcXFxjY5RORFkZWVx66238uabb7Jy5UoyMjLo1q1bjfbplW9ymzhxIsuWLeOpp57iN7/5Dddcc43n/VR1zo899hi33XZb+fTevXtZtGgRubm5bNiwwdN+CwoKOPfcc7npppv4/vvvWbx4MTfffHON69sre/zxxzn99NP5/vvvOf3003n88ccPW2f+/PnMmzePZcuWkZWVxcKFC5kzZw4Af/7zn2nTpg1r165l5cqV/PKXvwTg+uuv5/nnn69VbGW8vkfQ6FljcfD96f0VrNy6r0732bNDIg+N9D4sxuDBg1m2bBkA3333HbfffjsFBQXExMTw2muvccIJJzBlyhRmzZpFfn4+69ev54ILLuDJJ58E4LXXXuMvf/kLzZs3p1+/fkRFRQGwceNGrr/+enbt2kXr1q157bXXSE5OZuzYscTExLBkyRJ27NjB5MmTef3111mwYAGDBg1iypQpR4y1un1GR0ezZMkShg4dyi233MItt9zCzp07iY2NZdKkSfTo0YO3336bP/3pT4SHh5OUlMRnn33Ggw8+yMGDB/n666+57777+PDDD7n//vvp0aMH4JSebrrppsNimTRpEhMnTqSwsJBu3brxxhtvEBsbe9gx5s6dy4oVK7juuusoLCyktLSUd999l5SUFOLj49m/fz+jRo1i//79DBgwgPvuu49Vq1YRHx/PXXfdxfr166s8l8rnPGHChPLY8vLyWLZsGf369Suf969//YuRI0fStm1bZsyYwR/+8Ae//zb++c9/MnjwYEaOHFk+b9iwYX638+c///kPX375JQDXXnstw4YN44knnqiwjohQUFBAYWEhqkpRURFt27YFYPLkyaxevRqAsLAwWrVqBUBsbCxdunThu+++Y+DAgbWKMWTuj0usG+qQV1JSwueff86oUaMA6NGjB1999RVLlixh/PjxFS4WmZmZzJw5k+XLlzNz5kw2b97Mtm3beOih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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance, plot = get_roc_curve(final_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "id": "a54d6d52",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DISTANCE</td>\n",
       "      <td>0.282917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DEP_TIME_cat</td>\n",
       "      <td>0.264801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ON_WEEKEND</td>\n",
       "      <td>0.198412</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DEST_bc</td>\n",
       "      <td>0.144578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>CARRIER_cat</td>\n",
       "      <td>0.109292</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        feature     value\n",
       "0      DISTANCE  0.282917\n",
       "1  DEP_TIME_cat  0.264801\n",
       "2    ON_WEEKEND  0.198412\n",
       "3       DEST_bc  0.144578\n",
       "4   CARRIER_cat  0.109292"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "id": "38f1583d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# pagerank centrality\n",
    "\n",
    "pr = gds.pageRank.stream(G, relationshipWeightProperty=\"count\")\n",
    "pr['airport_id'] = [n.get('id') for n in gds.util.asNodes(pr['nodeId'].to_list())]\n",
    "pr = pr[['airport_id', 'score']].set_index('airport_id')\n",
    "\n",
    "dest_pr = pr.loc[df['DEST']].reset_index()\n",
    "origin_pr = pr.loc[df['ORIGIN']].reset_index()\n",
    "\n",
    "df['ORIGIN_pr'] = origin_bc['score']\n",
    "df['DEST_pr'] = dest_bc['score']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "c2d7a333",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DISTANCE', 'ARR_DEL15', 'DEST_pr']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "a4e7c6b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70645 21494]\n",
      " [19612 72546]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.78      0.77      0.77     92139\n",
      "           1       0.77      0.79      0.78     92158\n",
      "\n",
      "    accuracy                           0.78    184297\n",
      "   macro avg       0.78      0.78      0.78    184297\n",
      "weighted avg       0.78      0.78      0.78    184297\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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oype33nnnfTv358777yTZ599lpdeeqlO+16+fDnXXHNNpXnnn38+J554YqV5U6dO5Z///GelebGxsRWv161bx9lnn01ycjLDhg3j4osvZteuXXWKbd++fYwfP57k5GTGjx/P/v37q13vrrvuon///qSkpHDLLbegbi1GUVER1113HX369KFv3778619Opw5PP/00s2bNqlNs5ULmHhqrGgpdUVFRpKenk5GRQbt27XjmmWeCHVK1Pv30U9LT00lPT6900axJSUlJrY5RNRFkZGQwbdo0XnnlFdasWUNaWhq9e/eu1T698k1uM2fOZOXKlTz22GNcf/31/OIXv/C8n+rO+ZFHHuGWW26pmD5w4ADLli0jOzubTZs2edpvQUEB55xzDjfccAPr16/n22+/5cYbb6x1fXtVf/zjHxk3bhzr169n3Lhx/PGPfzxsncWLF7No0SJWrlxJRkYGS5cuZeHChQA8/PDDdOzYkXXr1rFmzRpOPfVUAK6++mqeeuqpOsVWzutzBE2ePUcQfL97ezVrdhys133269qaByZ4HxZj5MiRrFy5EoBvvvmGW2+9lYKCAqKionjxxRc57rjjmD17NgsWLCAvL4+NGzdywQUX8Kc//QmAF198kT/84Q+0adOGwYMH06pVKwA2b97M1Vdfzd69e0lISODFF18kMTGRqVOnEhUVxfLly9m9ezezZs3ipZde4quvvmLEiBHMnj37iLHWtM/IyEiWL1/O6NGjuemmm7jpppvYs2cP0dHRPPfcc/Tt25c33niD3/3ud4SHhxMfH89HH33E/fffT35+Pl9++SX33HMP7777Lvfeey99+/YFnNLTDTfccFgszz33HDNnzqSoqIjevXvz8ssvEx0dfdgxPv/8c1avXs1VV11FUVERZWVl/Otf/yI5OZnY2Fhyc3OZOHEiubm5DB8+nHvuuYe1a9cSGxvLHXfcwcaNG6s9l6rnPGPGjIrYcnJyWLlyJYMHD66Y9+9//5sJEybQqVMn5s2bx29+8xu/fxuvvfYaI0eOZMKECRXzxowZ43c7f/7zn//w2WefAXDllVcyZswYHn300UrriAgFBQUUFRWhqhQXF9OpUycAZs2axXfffQdAWFgYHTp0ACA6OpqkpCS++eYbTjjhhDrFGDIlglK15whCXWlpKR9//DETJ04EoG/fvnzxxRcsX76c6dOn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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance, plot = get_roc_curve(final_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "5478e9d5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DISTANCE</td>\n",
       "      <td>0.282332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DEP_TIME_cat</td>\n",
       "      <td>0.266679</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ON_WEEKEND</td>\n",
       "      <td>0.197892</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DEST_pr</td>\n",
       "      <td>0.143883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>CARRIER_cat</td>\n",
       "      <td>0.109214</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        feature     value\n",
       "0      DISTANCE  0.282332\n",
       "1  DEP_TIME_cat  0.266679\n",
       "2    ON_WEEKEND  0.197892\n",
       "3       DEST_pr  0.143883\n",
       "4   CARRIER_cat  0.109214"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "48faa11c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Louvain\n",
    "pr = gds.louvain.stream(G, relationshipWeightProperty='count')\n",
    "pr['airport_id'] = [n.get('id') for n in gds.util.asNodes(pr['nodeId'].to_list())]\n",
    "pr = pr[['airport_id', 'communityId']].set_index('airport_id')\n",
    "\n",
    "dest_louvain = pr.loc[df['DEST']].reset_index()\n",
    "origin_louvain = pr.loc[df['ORIGIN']].reset_index()\n",
    "\n",
    "df['ORIGIN_louvain'] = origin_louvain['communityId']\n",
    "df['DEST_louvain'] = dest_louvain['communityId']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "id": "14c82db7",
   "metadata": {},
   "outputs": [],
   "source": [
    "df['same_community'] = df.apply(lambda x: 1 if x['ORIGIN_louvain'] == x['DEST_louvain'] else 0, axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "7c2b9e02",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DISTANCE', 'ARR_DEL15', 'DEST_d', 'same_community']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "id": "201e3c67",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70670 21469]\n",
      " [20014 72144]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.78      0.77      0.77     92139\n",
      "           1       0.77      0.78      0.78     92158\n",
      "\n",
      "    accuracy                           0.77    184297\n",
      "   macro avg       0.77      0.77      0.77    184297\n",
      "weighted avg       0.77      0.77      0.77    184297\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "image/png": "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aiq9e/dm4MCB3HjjjQDcfffdPPzww3V27OHDh5e/njx5Mn369GHy5Mk888wzvPjii7Xa9+LFi7n88ssrzDvzzDM55phjKsybOHEib775ZoV5sbGx5a/XrFnDaaedRlJSEoMGDeLcc89l69attYpt165djBkzhqSkJMaMGcPu3burXO/mm2+mT58+JCcnc91116HuNauwsJBJkybRs2dPevXqxVtvOZ06PPnkk0yfPr1WsZUJmf4Wfu191BJBqImOjiY9PZ2MjAxat27NU089FeyQqvT555+Tnp5Oenp6hYtmdYqLi2t0jMqJICMjg2uuuYaXX36ZFStWkJaWxpFHHlmjfXrlm9ymTZvG0qVLeeihh/jTn/7E73//e8/7qeqc77vvPq677rry6T179rBo0SKys7PZsGGDp/0WFBRw+umnc+WVV7J27Vp++OEHrrrqqhrXt1d2//33M3r0aNauXcvo0aO5//77D1hn/vz5fPPNNyxdupSMjAwWLlzIvHnzAPj73/9O+/btWbNmDStWrOD4448H4LLLLuOJJ56oVWxlvD5H0OiV2nMEQfe3d5ez4ue9dbrP3p1actdY78NiDBs2jKVLlwLw/fffc/3111NQUEB0dDQvvPACRx11FDNmzGDOnDnk5eWxfv16fvvb3/Lggw8C8MILL/CPf/yDhIQEBgwYQPPmzQHIzMzksssuY8eOHbRr144XXniBxMREJk6cSHR0NIsXL2bbtm1Mnz6dF198kQULFjB06FBmzJhx0Fir22dUVBSLFy9mxIgRXH311Vx99dVs376dmJgYnn32WXr16sUbb7zB3/72N8LCwoiPj+eTTz7hzjvvJD8/n6+//ppbb72V999/n9tvv51evXoBTunpyiuvPCCWZ599lmnTplFYWMiRRx7JSy+9RExMzAHH+PLLL1m+fDmXXnophYWFlJaW8tZbb5GUlERsbCy5ubmMGzeO3NxcBg8ezK233srKlSuJjY3lpptuYv369VWeS+Vznjp1anlsOTk5LF26lAEDBpTPe/vttxk7diwdOnRg9uzZ3HbbbX7/Nl599VWGDRvG2LFjy+eNHDnS73b+/Pe//+WLL74A4JJLLmHkyJE88MADFdYREQoKCigsLERVKSoqokOHDgBMnz6dVatWAdCsWTPatm0LQExMDN26deP7779nyJAhtYoxdEoE9mRx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "importance, plot = get_roc_curve(final_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "dc1a0dfa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>DEP_TIME_cat</td>\n",
       "      <td>0.278291</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>DISTANCE</td>\n",
       "      <td>0.258854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ON_WEEKEND</td>\n",
       "      <td>0.198228</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>DEST_d</td>\n",
       "      <td>0.138881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>CARRIER_cat</td>\n",
       "      <td>0.111634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>same_community</td>\n",
       "      <td>0.014111</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          feature     value\n",
       "0    DEP_TIME_cat  0.278291\n",
       "1        DISTANCE  0.258854\n",
       "2      ON_WEEKEND  0.198228\n",
       "3          DEST_d  0.138881\n",
       "4     CARRIER_cat  0.111634\n",
       "5  same_community  0.014111"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "id": "4c24ecfd",
   "metadata": {},
   "outputs": [],
   "source": [
    "# embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "id": "00649859",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "nodeProjection            {'Airport': {'label': 'Airport', 'properties':...\n",
       "relationshipProjection    {'CONNECTION': {'orientation': 'NATURAL', 'agg...\n",
       "graphName                                                          airports\n",
       "nodeCount                                                               346\n",
       "relationshipCount                                                      5532\n",
       "projectMillis                                                            32\n",
       "Name: 0, dtype: object"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "7745c729",
   "metadata": {},
   "outputs": [],
   "source": [
    "airport_embeddings = gds.fastRP.stream(G, embeddingDimension=8, relationshipWeightProperty='count')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "id": "bc6251a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "airport_embeddings['airport_id'] = [n.get('id') for n in gds.util.asNodes(airport_embeddings['nodeId'].to_list())]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "id": "6cc625b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "airport_embeddings = airport_embeddings[['airport_id', 'embedding']].set_index('airport_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "id": "244e8090",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>embedding</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>airport_id</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>GNV</th>\n",
       "      <td>[0.3509531319141388, 0.11200349777936935, -0.1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSP</th>\n",
       "      <td>[0.4740193486213684, -0.2940526008605957, -0.4...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DTW</th>\n",
       "      <td>[0.5773559212684631, -0.1980077624320984, -0.4...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TLH</th>\n",
       "      <td>[0.4012877941131592, 0.03810671716928482, -0.3...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ATL</th>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OWB</th>\n",
       "      <td>[0.1433384269475937, -0.6602402925491333, 0.07...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OGS</th>\n",
       "      <td>[-0.10459548234939575, -0.6810443997383118, -0...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PPG</th>\n",
       "      <td>[-0.16898754239082336, 0.6526230573654175, 0.5...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OGD</th>\n",
       "      <td>[-0.37634313106536865, -0.5299034118652344, -0...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LYH</th>\n",
       "      <td>[0.4462912678718567, 0.04134361445903778, -0.6...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>346 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                    embedding\n",
       "airport_id                                                   \n",
       "GNV         [0.3509531319141388, 0.11200349777936935, -0.1...\n",
       "MSP         [0.4740193486213684, -0.2940526008605957, -0.4...\n",
       "DTW         [0.5773559212684631, -0.1980077624320984, -0.4...\n",
       "TLH         [0.4012877941131592, 0.03810671716928482, -0.3...\n",
       "ATL         [0.48828572034835815, -0.1439044326543808, -0....\n",
       "...                                                       ...\n",
       "OWB         [0.1433384269475937, -0.6602402925491333, 0.07...\n",
       "OGS         [-0.10459548234939575, -0.6810443997383118, -0...\n",
       "PPG         [-0.16898754239082336, 0.6526230573654175, 0.5...\n",
       "OGD         [-0.37634313106536865, -0.5299034118652344, -0...\n",
       "LYH         [0.4462912678718567, 0.04134361445903778, -0.6...\n",
       "\n",
       "[346 rows x 1 columns]"
      ]
     },
     "execution_count": 159,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "airport_embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "id": "56e52236",
   "metadata": {},
   "outputs": [],
   "source": [
    "dest_embedding = airport_embeddings.loc[df['DEST']].reset_index()\n",
    "origin_embedding = airport_embeddings.loc[df['ORIGIN']].reset_index()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "8f1161a1",
   "metadata": {},
   "outputs": [],
   "source": [
    "df['ORIGIN_emb'] = origin_embedding['embedding']\n",
    "df['DEST_emb'] = dest_embedding['embedding']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "a9244608",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = df[['ON_WEEKEND', 'CARRIER_cat','DEP_TIME_cat', 'DEST_d', 'DISTANCE', 'ARR_DEL15', 'ORIGIN_emb', 'DEST_emb']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "4e5a4ae4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ON_WEEKEND</th>\n",
       "      <th>CARRIER_cat</th>\n",
       "      <th>DEP_TIME_cat</th>\n",
       "      <th>DEST_d</th>\n",
       "      <th>DISTANCE</th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>ORIGIN_emb</th>\n",
       "      <th>DEST_emb</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>13719.920359</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.3509531319141388, 0.11200349777936935, -0.1...</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>427.651418</td>\n",
       "      <td>596.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.4740193486213684, -0.2940526008605957, -0.4...</td>\n",
       "      <td>[0.4428974688053131, -0.24343664944171906, -0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>427.651418</td>\n",
       "      <td>229.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.5773559212684631, -0.1980077624320984, -0.4...</td>\n",
       "      <td>[0.4428974688053131, -0.24343664944171906, -0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "      <td>13719.920359</td>\n",
       "      <td>223.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.4012877941131592, 0.03810671716928482, -0.3...</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>579.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "      <td>[0.4804370701313019, -0.046937376260757446, -0...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565958</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>2438.626399</td>\n",
       "      <td>3801.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[0.08188365399837494, 0.35334354639053345, 0.3...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565959</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565960</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "      <td>688.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565961</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>17</td>\n",
       "      <td>688.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565962</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>565963 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        ON_WEEKEND  CARRIER_cat  DEP_TIME_cat        DEST_d  DISTANCE  \\\n",
       "0                0            8             4  13719.920359     300.0   \n",
       "1                0            8            15    427.651418     596.0   \n",
       "2                0            8            12    427.651418     229.0   \n",
       "3                0            8            14  13719.920359     223.0   \n",
       "4                0            8            13      0.000000     579.0   \n",
       "...            ...          ...           ...           ...       ...   \n",
       "565958           0           12             5   2438.626399    3801.0   \n",
       "565959           0           12             5      0.000000     129.0   \n",
       "565960           0           12             6    688.000000     129.0   \n",
       "565961           0           12            17    688.000000     129.0   \n",
       "565962           0           12            16      0.000000     129.0   \n",
       "\n",
       "        ARR_DEL15                                         ORIGIN_emb  \\\n",
       "0             0.0  [0.3509531319141388, 0.11200349777936935, -0.1...   \n",
       "1             0.0  [0.4740193486213684, -0.2940526008605957, -0.4...   \n",
       "2             0.0  [0.5773559212684631, -0.1980077624320984, -0.4...   \n",
       "3             0.0  [0.4012877941131592, 0.03810671716928482, -0.3...   \n",
       "4             0.0  [0.48828572034835815, -0.1439044326543808, -0....   \n",
       "...           ...                                                ...   \n",
       "565958        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "565959        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "565960        0.0  [-0.11017882823944092, -0.011444123461842537, ...   \n",
       "565961        0.0  [-0.11017882823944092, -0.011444123461842537, ...   \n",
       "565962        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "\n",
       "                                                 DEST_emb  \n",
       "0       [0.48828572034835815, -0.1439044326543808, -0....  \n",
       "1       [0.4428974688053131, -0.24343664944171906, -0....  \n",
       "2       [0.4428974688053131, -0.24343664944171906, -0....  \n",
       "3       [0.48828572034835815, -0.1439044326543808, -0....  \n",
       "4       [0.4804370701313019, -0.046937376260757446, -0...  \n",
       "...                                                   ...  \n",
       "565958  [0.08188365399837494, 0.35334354639053345, 0.3...  \n",
       "565959  [-0.11017882823944092, -0.011444123461842537, ...  \n",
       "565960  [-0.22749248147010803, 0.01737743616104126, 0....  \n",
       "565961  [-0.22749248147010803, 0.01737743616104126, 0....  \n",
       "565962  [-0.11017882823944092, -0.011444123461842537, ...  \n",
       "\n",
       "[565963 rows x 8 columns]"
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "final_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "f2f281f8",
   "metadata": {},
   "outputs": [],
   "source": [
    "origin_df = pd.DataFrame(df['ORIGIN_emb'].tolist(), columns= [f'ORIGIN_emb_{i}' for i in range(0,8) ])\n",
    "dest_df = pd.DataFrame(df['DEST_emb'].tolist(), columns= [f'DEST_emb_{i}' for i in range(0,8) ] )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "51b9b87f",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = pd.concat([final_df, origin_df], axis=1)\n",
    "#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "b8b26516",
   "metadata": {},
   "outputs": [],
   "source": [
    "final_df = pd.concat([final_df, dest_df], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "1ffcf744",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ON_WEEKEND</th>\n",
       "      <th>CARRIER_cat</th>\n",
       "      <th>DEP_TIME_cat</th>\n",
       "      <th>DEST_d</th>\n",
       "      <th>DISTANCE</th>\n",
       "      <th>ARR_DEL15</th>\n",
       "      <th>ORIGIN_emb</th>\n",
       "      <th>DEST_emb</th>\n",
       "      <th>ORIGIN_emb_0</th>\n",
       "      <th>ORIGIN_emb_1</th>\n",
       "      <th>...</th>\n",
       "      <th>ORIGIN_emb_6</th>\n",
       "      <th>ORIGIN_emb_7</th>\n",
       "      <th>DEST_emb_0</th>\n",
       "      <th>DEST_emb_1</th>\n",
       "      <th>DEST_emb_2</th>\n",
       "      <th>DEST_emb_3</th>\n",
       "      <th>DEST_emb_4</th>\n",
       "      <th>DEST_emb_5</th>\n",
       "      <th>DEST_emb_6</th>\n",
       "      <th>DEST_emb_7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>13719.920359</td>\n",
       "      <td>300.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.3509531319141388, 0.11200349777936935, -0.1...</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "      <td>0.362123</td>\n",
       "      <td>0.430523</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.488964</td>\n",
       "      <td>0.037566</td>\n",
       "      <td>0.488286</td>\n",
       "      <td>-0.143904</td>\n",
       "      <td>-0.461343</td>\n",
       "      <td>1.636181</td>\n",
       "      <td>-0.584869</td>\n",
       "      <td>0.141743</td>\n",
       "      <td>-0.420671</td>\n",
       "      <td>0.319940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>427.651418</td>\n",
       "      <td>596.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.4740193486213684, -0.2940526008605957, -0.4...</td>\n",
       "      <td>[0.4428974688053131, -0.24343664944171906, -0....</td>\n",
       "      <td>0.296298</td>\n",
       "      <td>0.536606</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.250948</td>\n",
       "      <td>0.291740</td>\n",
       "      <td>0.442897</td>\n",
       "      <td>-0.243437</td>\n",
       "      <td>-0.529193</td>\n",
       "      <td>1.674330</td>\n",
       "      <td>-0.628190</td>\n",
       "      <td>0.127777</td>\n",
       "      <td>-0.243146</td>\n",
       "      <td>0.200119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>12</td>\n",
       "      <td>427.651418</td>\n",
       "      <td>229.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.5773559212684631, -0.1980077624320984, -0.4...</td>\n",
       "      <td>[0.4428974688053131, -0.24343664944171906, -0....</td>\n",
       "      <td>0.416600</td>\n",
       "      <td>0.613501</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.404439</td>\n",
       "      <td>0.320881</td>\n",
       "      <td>0.442897</td>\n",
       "      <td>-0.243437</td>\n",
       "      <td>-0.529193</td>\n",
       "      <td>1.674330</td>\n",
       "      <td>-0.628190</td>\n",
       "      <td>0.127777</td>\n",
       "      <td>-0.243146</td>\n",
       "      <td>0.200119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "      <td>13719.920359</td>\n",
       "      <td>223.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.4012877941131592, 0.03810671716928482, -0.3...</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "      <td>0.374707</td>\n",
       "      <td>0.454691</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.528712</td>\n",
       "      <td>0.022374</td>\n",
       "      <td>0.488286</td>\n",
       "      <td>-0.143904</td>\n",
       "      <td>-0.461343</td>\n",
       "      <td>1.636181</td>\n",
       "      <td>-0.584869</td>\n",
       "      <td>0.141743</td>\n",
       "      <td>-0.420671</td>\n",
       "      <td>0.319940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>579.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[0.48828572034835815, -0.1439044326543808, -0....</td>\n",
       "      <td>[0.4804370701313019, -0.046937376260757446, -0...</td>\n",
       "      <td>0.374494</td>\n",
       "      <td>0.561838</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.420671</td>\n",
       "      <td>0.319940</td>\n",
       "      <td>0.480437</td>\n",
       "      <td>-0.046937</td>\n",
       "      <td>-0.130251</td>\n",
       "      <td>1.698588</td>\n",
       "      <td>-0.155157</td>\n",
       "      <td>0.379529</td>\n",
       "      <td>-0.302744</td>\n",
       "      <td>0.166776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565958</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>2438.626399</td>\n",
       "      <td>3801.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[0.08188365399837494, 0.35334354639053345, 0.3...</td>\n",
       "      <td>-0.149099</td>\n",
       "      <td>0.290574</td>\n",
       "      <td>...</td>\n",
       "      <td>0.406791</td>\n",
       "      <td>-0.060132</td>\n",
       "      <td>0.081884</td>\n",
       "      <td>0.353344</td>\n",
       "      <td>0.301195</td>\n",
       "      <td>1.208431</td>\n",
       "      <td>-0.152420</td>\n",
       "      <td>1.038565</td>\n",
       "      <td>0.424426</td>\n",
       "      <td>0.387755</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565959</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>5</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>-0.149099</td>\n",
       "      <td>0.290574</td>\n",
       "      <td>...</td>\n",
       "      <td>0.406791</td>\n",
       "      <td>-0.060132</td>\n",
       "      <td>-0.110179</td>\n",
       "      <td>-0.011444</td>\n",
       "      <td>0.362709</td>\n",
       "      <td>0.526530</td>\n",
       "      <td>-0.129648</td>\n",
       "      <td>0.577856</td>\n",
       "      <td>0.456652</td>\n",
       "      <td>-0.261288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565960</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>6</td>\n",
       "      <td>688.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>-0.124284</td>\n",
       "      <td>0.243942</td>\n",
       "      <td>...</td>\n",
       "      <td>0.456652</td>\n",
       "      <td>-0.261288</td>\n",
       "      <td>-0.227492</td>\n",
       "      <td>0.017377</td>\n",
       "      <td>0.388235</td>\n",
       "      <td>0.739366</td>\n",
       "      <td>-0.344539</td>\n",
       "      <td>0.861421</td>\n",
       "      <td>0.406791</td>\n",
       "      <td>-0.060132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565961</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>17</td>\n",
       "      <td>688.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>-0.124284</td>\n",
       "      <td>0.243942</td>\n",
       "      <td>...</td>\n",
       "      <td>0.456652</td>\n",
       "      <td>-0.261288</td>\n",
       "      <td>-0.227492</td>\n",
       "      <td>0.017377</td>\n",
       "      <td>0.388235</td>\n",
       "      <td>0.739366</td>\n",
       "      <td>-0.344539</td>\n",
       "      <td>0.861421</td>\n",
       "      <td>0.406791</td>\n",
       "      <td>-0.060132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>565962</th>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>129.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>[-0.22749248147010803, 0.01737743616104126, 0....</td>\n",
       "      <td>[-0.11017882823944092, -0.011444123461842537, ...</td>\n",
       "      <td>-0.149099</td>\n",
       "      <td>0.290574</td>\n",
       "      <td>...</td>\n",
       "      <td>0.406791</td>\n",
       "      <td>-0.060132</td>\n",
       "      <td>-0.110179</td>\n",
       "      <td>-0.011444</td>\n",
       "      <td>0.362709</td>\n",
       "      <td>0.526530</td>\n",
       "      <td>-0.129648</td>\n",
       "      <td>0.577856</td>\n",
       "      <td>0.456652</td>\n",
       "      <td>-0.261288</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>565963 rows × 52 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        ON_WEEKEND  CARRIER_cat  DEP_TIME_cat        DEST_d  DISTANCE  \\\n",
       "0                0            8             4  13719.920359     300.0   \n",
       "1                0            8            15    427.651418     596.0   \n",
       "2                0            8            12    427.651418     229.0   \n",
       "3                0            8            14  13719.920359     223.0   \n",
       "4                0            8            13      0.000000     579.0   \n",
       "...            ...          ...           ...           ...       ...   \n",
       "565958           0           12             5   2438.626399    3801.0   \n",
       "565959           0           12             5      0.000000     129.0   \n",
       "565960           0           12             6    688.000000     129.0   \n",
       "565961           0           12            17    688.000000     129.0   \n",
       "565962           0           12            16      0.000000     129.0   \n",
       "\n",
       "        ARR_DEL15                                         ORIGIN_emb  \\\n",
       "0             0.0  [0.3509531319141388, 0.11200349777936935, -0.1...   \n",
       "1             0.0  [0.4740193486213684, -0.2940526008605957, -0.4...   \n",
       "2             0.0  [0.5773559212684631, -0.1980077624320984, -0.4...   \n",
       "3             0.0  [0.4012877941131592, 0.03810671716928482, -0.3...   \n",
       "4             0.0  [0.48828572034835815, -0.1439044326543808, -0....   \n",
       "...           ...                                                ...   \n",
       "565958        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "565959        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "565960        0.0  [-0.11017882823944092, -0.011444123461842537, ...   \n",
       "565961        0.0  [-0.11017882823944092, -0.011444123461842537, ...   \n",
       "565962        0.0  [-0.22749248147010803, 0.01737743616104126, 0....   \n",
       "\n",
       "                                                 DEST_emb  ORIGIN_emb_0  \\\n",
       "0       [0.48828572034835815, -0.1439044326543808, -0....      0.362123   \n",
       "1       [0.4428974688053131, -0.24343664944171906, -0....      0.296298   \n",
       "2       [0.4428974688053131, -0.24343664944171906, -0....      0.416600   \n",
       "3       [0.48828572034835815, -0.1439044326543808, -0....      0.374707   \n",
       "4       [0.4804370701313019, -0.046937376260757446, -0...      0.374494   \n",
       "...                                                   ...           ...   \n",
       "565958  [0.08188365399837494, 0.35334354639053345, 0.3...     -0.149099   \n",
       "565959  [-0.11017882823944092, -0.011444123461842537, ...     -0.149099   \n",
       "565960  [-0.22749248147010803, 0.01737743616104126, 0....     -0.124284   \n",
       "565961  [-0.22749248147010803, 0.01737743616104126, 0....     -0.124284   \n",
       "565962  [-0.11017882823944092, -0.011444123461842537, ...     -0.149099   \n",
       "\n",
       "        ORIGIN_emb_1  ...  ORIGIN_emb_6  ORIGIN_emb_7  DEST_emb_0  DEST_emb_1  \\\n",
       "0           0.430523  ...     -0.488964      0.037566    0.488286   -0.143904   \n",
       "1           0.536606  ...     -0.250948      0.291740    0.442897   -0.243437   \n",
       "2           0.613501  ...     -0.404439      0.320881    0.442897   -0.243437   \n",
       "3           0.454691  ...     -0.528712      0.022374    0.488286   -0.143904   \n",
       "4           0.561838  ...     -0.420671      0.319940    0.480437   -0.046937   \n",
       "...              ...  ...           ...           ...         ...         ...   \n",
       "565958      0.290574  ...      0.406791     -0.060132    0.081884    0.353344   \n",
       "565959      0.290574  ...      0.406791     -0.060132   -0.110179   -0.011444   \n",
       "565960      0.243942  ...      0.456652     -0.261288   -0.227492    0.017377   \n",
       "565961      0.243942  ...      0.456652     -0.261288   -0.227492    0.017377   \n",
       "565962      0.290574  ...      0.406791     -0.060132   -0.110179   -0.011444   \n",
       "\n",
       "        DEST_emb_2  DEST_emb_3  DEST_emb_4  DEST_emb_5  DEST_emb_6  DEST_emb_7  \n",
       "0        -0.461343    1.636181   -0.584869    0.141743   -0.420671    0.319940  \n",
       "1        -0.529193    1.674330   -0.628190    0.127777   -0.243146    0.200119  \n",
       "2        -0.529193    1.674330   -0.628190    0.127777   -0.243146    0.200119  \n",
       "3        -0.461343    1.636181   -0.584869    0.141743   -0.420671    0.319940  \n",
       "4        -0.130251    1.698588   -0.155157    0.379529   -0.302744    0.166776  \n",
       "...            ...         ...         ...         ...         ...         ...  \n",
       "565958    0.301195    1.208431   -0.152420    1.038565    0.424426    0.387755  \n",
       "565959    0.362709    0.526530   -0.129648    0.577856    0.456652   -0.261288  \n",
       "565960    0.388235    0.739366   -0.344539    0.861421    0.406791   -0.060132  \n",
       "565961    0.388235    0.739366   -0.344539    0.861421    0.406791   -0.060132  \n",
       "565962    0.362709    0.526530   -0.129648    0.577856    0.456652   -0.261288  \n",
       "\n",
       "[565963 rows x 52 columns]"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "final_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "bb9cb734",
   "metadata": {},
   "outputs": [],
   "source": [
    "df_X = final_df.drop(['ARR_DEL15', 'ORIGIN_emb', 'DEST_emb'], axis=1)\n",
    "df_y = final_df[['ARR_DEL15']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "d86ac584",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df_X.values\n",
    "y = df_y.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "96172a65",
   "metadata": {},
   "outputs": [],
   "source": [
    "y = LabelBinarizer().fit_transform(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "e56a996c",
   "metadata": {},
   "outputs": [],
   "source": [
    "oversample = SMOTE()\n",
    "X, y = oversample.fit_resample(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "668c646a",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = StandardScaler().fit_transform(X)\n",
    "X = MinMaxScaler().fit_transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "daacab7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "a0a5d383",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = RandomForestClassifier()\n",
    "model = model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "12bfe938",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred_test = model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "ce9c775f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[70210 21929]\n",
      " [20971 71187]]\n"
     ]
    }
   ],
   "source": [
    "print(confusion_matrix(y_test, y_pred_test))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "dc7a2b56",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.77      0.76      0.77     92139\n",
      "           1       0.76      0.77      0.77     92158\n",
      "\n",
      "    accuracy                           0.77    184297\n",
      "   macro avg       0.77      0.77      0.77    184297\n",
      "weighted avg       0.77      0.77      0.77    184297\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(classification_report(y_test, y_pred_test))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "514b1259",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/tomaz/anaconda3/envs/clean/lib/python3.9/site-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function plot_roc_curve is deprecated; Function :func:`plot_roc_curve` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: :meth:`sklearn.metric.RocCurveDisplay.from_predictions` or :meth:`sklearn.metric.RocCurveDisplay.from_estimator`.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.roc_curve.RocCurveDisplay at 0x7eff9f74ff40>"
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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iAhSUlLo168f48aN48CBA7Vy3BkzZnDLLbfUyrG6du1K//79SUlJISUlhcWLF9fKcStKS0tjwYIFRyz797//TWpqKn369GHQoEHccccdADz44IM89thjtXbuU045pXz6rrvuom/fvtx11108//zzvPrqqzU69sqVK7nuuuuOWPbTn/6U4cOHH7Fs0qRJ/POf/zxiWUJCQvn0xo0bOffcc0lOTmbw4MFcdtll7N69u0ax7du3j7Fjx5KcnMzYsWPZv39/pdvdfffd9O3bl969e3Pbbbeh6lTDjh49mpNPPrn8b2PPnj0APP3000yfPr1GsZUJm7tioc9yBOEqNjaWtLQ00tPTadWqFc8880yoQ6rUxx9/TFpaGmlpaUfcNKtSXFxcrXNUTAjS09O55ZZbeO2111i3bh3Lly+nZ8+e1TqmV/6J27Rp01i9ejWPPvooN9xwAz//+c89H6eya3744Ye57bbbyucPHDjAihUryMnJISMjw9NxCwoKOO+887jxxhvZtGkTX3/9NTfddFO1y9sreuSRRzj99NPZtGkTp59+Oo888shR2yxevJgvvviC1atXk56ezrJly1i0aFH5+tmzZ5f/bbRt2xaAa6+9lqlTp9YotjJh0ydzQbHlCELtD++uZd33B2v1mH1ObMYD47wPizFixAhWr14NwNKlS7n99tspKCggNjaWV155hZNPPpkZM2Ywf/58Dh8+zJYtW7jwwgv561//CsArr7zCn//8Z1q0aMHAgQOJjo4GYOvWrVx77bVkZ2eTlJTEK6+8QufOnZk0aRKxsbGsXLmSPXv2MH36dF599VWWLFnCsGHDmDFjxjFjreqYMTExrFy5kpEjR3LzzTdz8803k5WVRVxcHC+++CK9evXijTfe4A9/+AMRERE0b96cDz/8kPvvv5/8/Hw+//xz7r33Xt5//31+97vf0atXL8DJPd14441HxfLiiy8ybdo0ioqK6NmzJ7NmzSIuLu6oc3z66aesXbuWa665hqKiIkpLS3nzzTdJTk4mISGBvLw8xo8fT15eHkOGDOHee+9l/fr1JCQkcOedd7Jly5ZKr6XiNT/xxBPlseXm5rJ69WoGDhxYvuxf//oX48aNo127dsydO5ff/va3Af82/vGPfzBixAjGjRtXvmz06NEB9wvknXfe4ZNPPgHg6quvZvTo0fzlL385YhsRoaCg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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_roc_curve(model, X_test, y_test)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bfbdb43e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "clean",
   "language": "python",
   "name": "clean"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
